package com.webauto.test_case;

import org.openqa.selenium.By;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import com.webauto.pojo.WriteData;
import com.webauto.asserts.assertUtil;
import com.webauto.data_driver.CaseUtil;
import com.webauto.data_driver.ExcelUtil;
import com.webauto.log.Log;
import com.webauto.po.PO;
import com.webauto.pojo.Case;
import com.webauto.pojo.Element;
import com.webauto.selenium.FindElementUtil;
import com.webauto.selenium.ManagerUtil;
import com.webauto.selenium.SeleniumDriverUtil;
import com.webauto.selenium.UseElementUtil;

/**
 * PS:登录测试
 * @author lkk
 *
 */
public class Test1_LoginCase extends BaseCase {
	/**
	 * PS:测试方法
	 * @param testNum 测试编号
	 * @param caseNum 用例编号
	 * @param caseName 测试名称
	 * @param caseType 测试类型
	 * @param testData 测试数据
	 * @param expectedResult 预计结果
	 * @param actualResult 实际结果
	 */
	@Test(dataProvider = "datas")
	public void login(String testNum, String caseNum, String caseName, String caseType, String testData,String checkPoint,
			String expectedResult, String actualResult) {
		SeleniumDriverUtil.go("http://localhost:8080/login");
		// 获取登录页面PO对象
		PO loginPO = new PO("登录页面", testData);
		loginPO.sendKeys("账号", "账号");
		loginPO.sendKeys("密码", "密码");
		loginPO.sendKeys("验证码", "验证码");
		loginPO.click("登录按钮");

		// 断言结果
		boolean flag = false;
		String result = null;
		try {
			if ("1".equals(caseType)) {
				// 获取登录页面PO对象
				PO indexPO = new PO("首页", testData);
				if (indexPO.pageIfLoad("头像")) {
					result = SeleniumDriverUtil.getUrl();
					flag = assertUtil.check(result, expectedResult);
				} else {
					throw new AssertionError("+++首页加载失败+++");
				}
			} else if ("0".equals(caseType)) {
				//获取检查点选择器对象
				By checkPointBy = loginPO.getByByCheckPoint(checkPoint);
				//获取检查元素的文本
				result = UseElementUtil.getText(checkPointBy);
				//断言
				flag = assertUtil.equals(result, expectedResult);
			} else {
				throw new AssertionError("+++测试类型不存在,测试类型:[" + caseType + "]+++");
			}
		} catch (AssertionError e) {
			throw new AssertionError("+++用例" + caseNum + "执行未通过," + e.getMessage() + "+++");
		} finally {
			CaseUtil.writeData(flag, "用例", caseNum, "ActualResult", result);
		}

	}
	
	/**
	 * PS:数据提供者
	 * @return 数据二维数组,Test方法会按照数组数量进行多次测试
	 */
	@DataProvider(name = "datas")
	public Object[][] datas() {
		Object[][] datas = CaseUtil.getExcelEntity("testNum", "test-001", ExcelUtil.cases, ExcelUtil.casefields,
				Case.class);
		return datas;
	}
	
	@BeforeClass
	public void beforeClass() {
		
	}

}
